package tag39_03_09.AufgabePhilosofen;

public class Philosoph extends Thread {
	
	/**
	 * 
	 * @param namen - soll die Form "Nachname, Vorname" oder "Nachname" haben, sonst: IllegalArgumentException
	 * @return
	 */
	public static Philosoph parse(String namen) throws IllegalArgumentException {
		
		String[] subStrings = namen.split(", ");
		
		if(subStrings.length == 1) {
			return new Philosoph(subStrings[0].trim());
		} else if(subStrings.length == 2 || subStrings.length == 3) {
			return new Philosoph(subStrings[1].trim(), subStrings[0].trim());
		}
		
		throw new IllegalArgumentException("Falsche String mit Philosophennamen: " + namen);
	}
	
	private String vorname, nachname;
	private Object gabelLinks, gabelRechts;


	public Philosoph(String vorname, String nachname) {
		this.vorname = vorname;
		this.nachname = nachname;
	}

	public Philosoph(String nachname) {
		this("", nachname);
	}
	
	@Override
	public String toString() {
		return vorname != null ? vorname + " " + nachname : nachname; 

	}
	
	public void setGabelLinks(Object gabelLinks) {
		this.gabelLinks = gabelLinks;
	}
	
	public void setGabelRechts(Object gabelRechts) {
		this.gabelRechts = gabelRechts;
	}
	
	
	
	@Override
	public void run() {

	while(true){
		System.out.println(nachname + " denkt nach... ");
		pause(1000);
		System.out.println(nachname + " bekommt Hunger!");
		synchronized (gabelLinks) {
			System.out.println(nachname + " nimmt die linke Gabel");
			pause(50);
			
			synchronized (gabelRechts) {
				System.out.println(nachname + " nimmt die rechte Gabel");
				System.out.println(nachname + " isst...");
				pause(1000);	
			}
			
		}
	}
	
	}
	
	private void pause(int millis){
		try {
			Thread.sleep(millis);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}
